home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGBLER / WHIZZARD.LZH / TIMEDEMO.BAS < prev    next >
BASIC Source File  |  1984-06-26  |  14KB  |  363 lines

  1. 1  REM    TIMEDEMO.BAS    Measure time to print 10 long strings on a screen
  2. 2  REM            under varying conditions below
  3. 3  REM
  4. 4  REM    ***** NOTE:  USE SUBDEMO.BAS for examples of how to use the routines
  5. 5  REM             Because extra convoluted logic is used here.
  6. 6  REM
  7. 10 REM    Time QPRINT, PRINT under conditions below
  8. 20 REM    Interpreted Standard PRINT
  9. 30 REM    Interpreted PRINT with BASPRINT
  10. 40 REM    Interpreted QPRINT with ASMBASIC
  11. 50 REM    Compiled PRINT
  12. 60 REM    Compiled PRINT with COMPRINT or PRSLASHO
  13. 70 REM    Compiled QPRINT
  14. 80 REM    Compiled CLS versus CLREOS
  15. 90 REM    Make a random access file with    time to write the screen.
  16. 100 REM For each time cycle, read in the RA file, and display the times for
  17. 110 REM   each type of print, and display the number of times the screen has
  18. 120 REM   been written.
  19. 130 REM Determine whether we are running compiled or interpreted
  20. 140 REM          FLAG% = 0     if interpreted
  21. 144 REM          FLAG% = 1     if compiled without /O (needs BASRUN.EXE)
  22. 145 REM          FLAG% = 2     if compiled with /O
  23. 150 REM          FLAG% = 3     if business basic compiled
  24. 170 REM
  25. 180    DIM A$(20),T$(20)
  26. 190    DEFINT S,I
  27. 200    KEY OFF
  28. 210    FOR I = 1 TO 10
  29. 220       KEY I,""
  30. 230    NEXT I
  31. 240 REM
  32. 250   DEF SEG
  33. 260   TEST$ = "K"
  34. 270   A% = VARPTR(TEST$)
  35. 280    B% = PEEK(A%+1) + 256*PEEK(A%+2)
  36. 290     IF CHR$(PEEK(B%)) = "K" THEN FLAG% = 0 : GOTO 360
  37. 300    B% = PEEK(A%+2) + 256*PEEK(A%+3)
  38. 310     IF CHR$(PEEK(B%)) <> "K" THEN FLAG% = 3 : GOTO 788
  39. 312      WIDTH 80 : IF PEEK(&H7CC) = 80 THEN FLAG% = 1   ELSE FLAG% = 2
  40. 320       GOTO 880
  41. 330 REM
  42. 340 REM If interpreted, check that ASMBASIC is resident below the interpreter
  43. 350 REM
  44. 360  DEF SEG = 0
  45. 370  A% = PEEK(&H19C) + 256*PEEK(&H19D) : B% = PEEK(&H19E) + 256*PEEK(&H19F)
  46. 380    DEF SEG = B%
  47. 390    IF (PEEK(A%-1) = &H52) AND (PEEK(A%-2) = &H52) THEN ASM%=1:GOTO 470
  48. 400      CLS : PRINT TAB(85);"ASMBASIC must be executed once before starting"
  49. 410        PRINT TAB(15);"the Basic interpreter"
  50. 420      ASM% = 0
  51. 430      GOTO 880
  52. 440 REM
  53. 450 REM If interpreted, then get the segment and offset of the utility routines
  54. 460 REM
  55. 470    DEF SEG
  56. 480    DIM INIT%(3)           ' setup subroutine containing  INT  67h
  57. 490    INIT%(1) = &H67CD       '                              RETF 2
  58. 500    INIT%(2) = &H2CA
  59. 510    INIT%(3) = 0
  60. 520    SUBINIT = 0
  61. 530 REM
  62. 540 REM         get the code segment of the utility subroutines
  63. 550  SEGVALUE% = 0
  64. 560    SUBINIT = VARPTR(INIT%(1)): CALL SUBINIT(SEGVALUE%)
  65. 570 REM
  66. 580 REM         get the offset of the utility subroutines
  67. 590  A% = 1
  68. 600    SUBINIT = VARPTR(INIT%(1)):CALL SUBINIT(A%)
  69. 610     QPRINT = A%
  70. 620  A% = 2
  71. 630    SUBINIT = VARPTR(INIT%(1)):CALL SUBINIT(A%)
  72. 640     SCRLDN = A%
  73. 650  A% = 3
  74. 660    SUBINIT = VARPTR(INIT%(1)):CALL SUBINIT(A%)
  75. 670     SCRLUP = A%
  76. 680  A% = 4
  77. 690    SUBINIT = VARPTR(INIT%(1)):CALL SUBINIT(A%)
  78. 700     XREP = A%
  79. 710  A% = 5
  80. 720    SUBINIT = VARPTR(INIT%(1)):CALL SUBINIT(A%)
  81. 730     YREP = A%
  82. 740  A% = 6
  83. 750    SUBINIT = VARPTR(INIT%(1)):CALL SUBINIT(A%)
  84. 760     CLREOL = A%
  85. 770  A% = 7
  86. 780    SUBINIT = VARPTR(INIT%(1)):CALL SUBINIT(A%)
  87. 790     CLREOS = A%
  88. 800  A% = 8
  89. 810    SUBINIT = VARPTR(INIT%(1)):CALL SUBINIT(A%)
  90. 820     ZPRINT = A%
  91. 830 REM
  92. 840 REM         set the segment value for interpreted basic
  93. 850 REM
  94. 860     DEF SEG = SEGVALUE%
  95. 870 REM
  96. 880 REM  define some attributes for use throughout the demo
  97. 890    IF FLAG% = 0 THEN GOTO 930 ELSE DEF SEG
  98. 900     ' check for comprint or prslasho, prslasho will be in the demo
  99. 910    '  if 100 lines take less than 3 seconds comprint is here
  100. 911    CLS ' initialize PRSLASHO or COMPRINT !!!!!!!!!!
  101. 920    STARTTIME$=TIME$
  102. 922    FOR I = 1 TO 100:
  103. 923    LOCATE 1,1:PRINT " TESTING IF COMPRINT OR PRSLASHO ARE PRESENT"
  104. 924    NEXT I
  105. 927    ENDTIME$ = TIME$
  106. 928    GOSUB 2840: IF DIFTIME# < 3! THEN BASPRINT%=1 ELSE BASPRINT% = 0
  107. 929 GOTO 1000
  108. 930    DEF SEG = 0  ' interpreted, check for basprint
  109. 940     B02D0% = PEEK(&H2D0):B02D1%=PEEK(&H2D1):B02D2%=PEEK(&H2D2):B02D3%=PEEK(&H2D3)
  110. 950     PRINT " CHECKING FOR BASPRINT  0:02D0 = ";HEX$(B02D1%);" ";HEX$(B02D0%);" ";HEX$(B02D3%);" ";HEX$(B02D2%)
  111. 960     IF B02D1% = 0 THEN BASPRINT% = 1 ELSE BASPRINT% = 0
  112. 980    DEF SEG
  113. 990 REM
  114. 1000    IF FLAG% = 0 THEN PRINT " INTERPRETED, ASMBASIC.EXE SPEEDS UP PRINTS "
  115. 1010    IF FLAG% = 1 THEN PRINT " COMPILED WITHOUT /O, BASRUN.EXE NEEDED, COMPRINT.EXE SPEEDS UP PRINTS"
  116. 1015    IF FLAG% = 2 THEN PRINT " COMPILED WITH /O, BASRUN.EXE NOT NEEDED, PRSLASHO.EXE SPEEDS UP PRINTS"
  117. 1020    IF FLAG% = 3 THEN PRINT " BUSINESS BASIC COMPILED "
  118. 1030    IF FLAG% = 0 AND ASM% = 0 THEN PRINT " ASMBASIC NOT PRESENT"
  119. 1040    IF FLAG% = 0 AND ASM% = 1 THEN PRINT " ASMBASIC PRESENT"
  120. 1050    IF FLAG% = 1 AND BASPRINT% = 0 THEN PRINT " COMPRINT IS NOT PRESENT "
  121. 1052    IF FLAG% = 1 AND BASPRINT% = 1 THEN PRINT " COMPRINT IS PRESENT"
  122. 1054    IF FLAG% = 2 AND BASPRINT% = 0 THEN PRINT " PRSLASHO IS NOT PRESENT "
  123. 1060    IF FLAG% = 2 AND BASPRINT% = 1 THEN PRINT " PRSLASHO IS PRESENT"
  124. 1070    IF FLAG% = 0 AND BASPRINT% = 0 THEN PRINT " BASPRINT NOT PRESENT"
  125. 1080    IF FLAG% = 0 AND BASPRINT% = 1 THEN PRINT " BASPRINT PRESENT"
  126. 1090    IF ASM% =1 THEN  DEF SEG = SEGVALUE%
  127. 1095    INPUT " ENTER HOW MANY SECONDS YOU WANT THE DEMO TO LAST ";JUNK$
  128. 1096    IF JUNK$="" THEN SECDIV# = 1!:GOTO 1110
  129. 1100    NU$=""
  130. 1101    FOR I = 1 TO LEN(JUNK$)
  131. 1102      TE$ = MID$(JUNK$,I,1)
  132. 1103    IF INSTR("0123456789",TE$) > 0 THEN NU$=NU$+TE$ ELSE NU$="":I=LEN(JUNK$)
  133. 1104    NEXT I
  134. 1105    IF LEN(NU$) > 0 THEN SECS#=VAL(RIGHT$(NU$,8)) ELSE BEEP:GOTO 1095
  135. 1106    SECDIV# = SECS#/100!
  136. 1107    IF SECDIV# < .05 THEN SECDIV# = .05   ' keep for loop indices in bounds
  137. 1108    IF SECDIV# > 100! THEN SECDIV# = 100!
  138. 1110    CLS : LOCATE 4,4 : INPUT "Would you like the demonstration in color (Y/N)";A$
  139. 1120    IF A$ = "Y" OR A$ = "y" THEN 1320
  140. 1130    IF A$ <> "N" AND A$ <> "n" THEN 1080
  141. 1140 REM
  142. 1150 REM    black and white attributes
  143. 1160 REM
  144. 1170    NORMAL%  = 7   ' normal intensity white on black
  145. 1180    BLUE%     = 7
  146. 1190    GREEN%     = 7
  147. 1200    CYAN%     = 7
  148. 1210    RED%     = 7
  149. 1220    MAGENTA% = 7
  150. 1230    BROWN%     = 7
  151. 1240    YELLOW%  = 7
  152. 1250    WHITE%     = 15  ' high intensity white on black
  153. 1260    LIGHTER% = 7
  154. 1270    BLINK%     = 128
  155. 1280        GOTO 1570
  156. 1290 REM
  157. 1300 REM    color attributes
  158. 1310 REM
  159. 1320    NORMAL%  = 7   ' normal intensity white on black
  160. 1330    BLUE%     = 1
  161. 1340    GREEN%     = 2
  162. 1350    CYAN%     = 3
  163. 1360    RED%     = 4
  164. 1370    MAGENTA% = 5
  165. 1380    BROWN%     = 6
  166. 1390    YELLOW%  = 14
  167. 1400    WHITE%     = 15  ' high intensity white on black
  168. 1410 REM
  169. 1420 REM  To make a color lighter, logically OR the LIGHTER% with
  170. 1430 REM    the color.
  171. 1440 REM         Ex:      ATTRIBUTE% = RED% OR LIGHTER%
  172. 1450 REM    will give a light red color.
  173. 1460 REM
  174. 1470           LIGHTER% = 8
  175. 1480 REM
  176. 1490 REM  To make a color blink, logically OR the BLINK% with
  177. 1500 REM    the color.
  178. 1510 REM         Ex:      ATTRIBUTE% = RED% OR BLINK%
  179. 1520 REM    will give a blinking red color.
  180. 1530 REM
  181. 1540           BLINK% = 128
  182. 1550 REM
  183. 1560 REM
  184. 1570 REM
  185. 1580 REM
  186. 1590 REM If interpreted, check that ASMBASIC is resident below the interpreter
  187. 1600 REM
  188. 1610 ' DEF SEG = 0
  189. 1620 ' A% = PEEK(&H19C) + 256*PEEK(&H19D) : B% = PEEK(&H19E) + 256*PEEK(&H19F)
  190. 1630 '    DEF SEG = B%
  191. 1640 '    IF (PEEK(A%-1) = &H52) AND (PEEK(A%-2) = &H52)  THEN PRINT " ASMBASIC PRESENT " :ASM% = 1:ELSE PRINT " ASMBASIC NOT PRESENT ":ASM%=0
  192. 1650 'GOTO 1500
  193. 1660 '      CLS : PRINT TAB(85);"ASMBASIC must be executed once before starting"
  194. 1670 'REM OR comprint  should be executed when testing accelerated technique
  195. 1680 '            PRINT TAB(15);"the Basic interpreter"
  196. 1690 '      SYSTEM
  197. 1700 REM   ***************************************************************
  198. 1710 REM   Read in or Initialize as necessary a printable file of data
  199. 1712 GOSUB 1950  ' initialize the timing string arrays
  200. 1720 OPEN "R",1,"TIMEPRIN.FIL",81
  201. 1730 FIELD #1, 1 AS CHECKI$, 49 AS AA$, 10 AS TT$, 21 AS SS$
  202. 1740 REM    initialize the time per screen variable strings to spaces
  203. 1750 FOR I = 1 TO 10:T$(I)=SPACE$(10):NEXT I
  204. 1760 S$  =  " Seconds per screen"
  205. 1770 FIELD #1, 79 AS OURNAME$, 2 AS ENDFILE$
  206. 1772 TEMP$= " RAYHAWK AUTOMATION, P.O. BOX 1427, BEAVERTON OR, 97075"
  207. 1774 LSET OURNAME$=SPACE$(79)
  208. 1776 LSET ENDFILE$=CHR$(13)+CHR$(10)
  209. 1778 PUT #1,10     ' if the file was not there before, it will be now,
  210. 1779 REM       disk space permitting
  211. 1790 FOR I = 1 TO 9
  212. 1800   GET #1,I:IF LEFT$(A$(I),49)=AA$ THEN T$(I) = TT$:GOTO 1810
  213. 1802 REM     uninitialized record, lets initialize it so it can be printed
  214. 1804   LSET CHECKI$=RIGHT$(STR$(I),1)
  215. 1805   LSET AA$ = A$(I)
  216. 1806   LSET TT$ = T$(I)
  217. 1807   IF I = 1 THEN LSET SS$=SPACE$(19)+CHR$(13)+CHR$(10)
  218. 1808   IF I > 1 THEN LSET SS$=S$+CHR$(13)+CHR$(10) ' carriage return, line feed
  219. 1809   PUT #1,I
  220. 1810 NEXT I
  221. 1820 ON ERROR GOTO 0
  222. 1830 GOSUB 1950
  223. 1840 REM
  224. 1850 IF FLAG% > 0 AND BASPRINT% = 0 THEN TINDEX%=5:GOSUB 2150 ' no comprint
  225. 1860 IF FLAG% > 0 AND BASPRINT% = 1 THEN TINDEX%=6:GOSUB 2150 '  comprint
  226. 1870 IF FLAG% = 0 AND BASPRINT% = 0 THEN TINDEX%=2:GOSUB 2150 ' no comprint
  227. 1880 IF FLAG% = 0 AND BASPRINT% = 1 THEN TINDEX%=3:GOSUB 2150 '  comprint
  228. 1890 IF FLAG% > 0 THEN GOSUB 2350 ' compiled, show off QPRINT
  229. 1900 IF FLAG% = 0 AND ASM% = 1 THEN GOSUB 2490    ' interpreted, ASMBASIC present
  230. 1901                           '   show off QPRINT
  231. 1910 IF FLAG% > 0 THEN GOSUB 2630  'compiled, time CLS
  232. 1920 IF FLAG% > 0 THEN GOSUB 2710  'compiled, time CLREOS
  233. 1930 LOCATE 25,1:INPUT    " ENTER TO STOP THE PROGRAM ";JUNK$
  234. 1940 SYSTEM
  235. 1942 REM
  236. 1944 REM ****************************************************************
  237. 1946 REM
  238. 1950 REM   Initialize the timing arrays
  239. 1960 REM
  240. 1970 A$(1) =  " Time QPRINT, PRINT under conditions below       "
  241. 1980 A$(2) =  " Interpreted Standard PRINT                      " + T$(2)+ S$
  242. 1990 A$(3) =  " Interpreted PRINT with BASPRINT                 " + T$(3)+ S$
  243. 2000 A$(4) =  " Interpreted QPRINT with ASMBASIC                " + T$(4)+ S$
  244. 2010 A$(5) =  " Compiled PRINT                                  " + T$(5)+ S$
  245. 2020 A$(6) =  " Compiled PRINT with COMPRINT or PRSLASHO        " + T$(6)+ S$
  246. 2030 A$(7) =  " Compiled QPRINT                                 " + T$(7)+ S$
  247. 2040 A$(8) =  " Compiled CLS                                    " + T$(8)+ S$
  248. 2050 A$(9) =  " Compiled CLREOS performing CLS function         " + T$(9)+ S$
  249. 2060 RETURN
  250. 2070 REM
  251. 2080 REM   print out the latest results
  252. 2090 GOSUB 1950
  253. 2100 FOR I = 0 TO 9
  254. 2110   LOCATE I+I+6,1:PRINT A$(I);
  255. 2120 NEXT I
  256. 2130 RETURN
  257. 2140 REM
  258. 2150 REM   TEST PRINT  compiled or interpreted
  259. 2160 IF TINDEX%=5 AND FLAG% = 1 THEN A$(0) = " Testing  Compiled PRINT statements without COMPRINT "
  260. 2162 IF TINDEX%=6 AND FLAG% = 1 THEN A$(0) = " Testing  Compiled PRINT statements with    COMPRINT "
  261. 2164 IF TINDEX%=5 AND FLAG% = 2 THEN A$(0) = " Testing  Compiled PRINT statements without PRSLASHO "
  262. 2166 IF TINDEX%=6 AND FLAG% = 2 THEN A$(0) = " Testing  Compiled PRINT statements with    PRSLASHO "
  263. 2180 IF TINDEX%=2 THEN A$(0) = " Testing  Interpreted PRINT statements without BASPRINT "
  264. 2190 IF TINDEX%=3 THEN A$(0) = " Testing  Interpreted PRINT statements with    BASPRINT "
  265. 2200   ASPACE$=SPACE$(79)
  266. 2205   NOSCREENS = 50 * SECDIV#
  267. 2206   IF TINDEX% < 5 THEN NOSCREENS = 20 * SECDIV#
  268. 2210   STARTTIME$=TIME$
  269. 2240   FOR ISCREEN = 1 TO NOSCREENS
  270. 2250     CLS
  271. 2260     FOR I = 0 TO 9
  272. 2270        LOCATE I+I+6,1:PRINT A$(I);
  273. 2280      NEXT I
  274. 2290 ' SCNO$= " SCREEN NUMBER "+RIGHT$("     "+STR$(ISCREEN) ,5)
  275. 2300 ' LOCATE 20,10:PRINT SCNO$
  276. 2310   NEXT ISCREEN
  277. 2320   GOSUB 3000
  278. 2330 RETURN
  279. 2340 REM  next demonstrate     QPRINT --------------------------------------
  280. 2350 REM   TEST COMPILED QPRINT
  281. 2360   A$(0) = " Testing  Compiled QPRINT statements "
  282. 2365   NOSCREENS = 100 * SECDIV#
  283. 2370   STARTTIME$=TIME$
  284. 2390   FOR ISCREEN = 1 TO NOSCREENS
  285. 2400    CLS
  286. 2410    FOR I = 0 TO 9
  287. 2420       LOCATE I+I+6,1:CALL QPRINT (FLAG%,A$(I))
  288. 2430     NEXT I
  289. 2440 ' SCNO$= " SCREEN NUMBER "+RIGHT$("     "+STR$(ISCREEN) ,5)
  290. 2450 ' LOCATE 20,10:PRINT SCNO$
  291. 2460   NEXT ISCREEN
  292. 2470   TINDEX%=7:GOSUB 3000
  293. 2480 RETURN
  294. 2490 REM   TEST INTERPRETED QPRINT
  295. 2500   A$(0) = " Testing  Interpreted QPRINT statements "
  296. 2505   NOSCREENS = 20 * SECDIV#
  297. 2510   STARTTIME$=TIME$
  298. 2530   FOR ISCREEN = 1 TO NOSCREENS
  299. 2540     CLS
  300. 2550     FOR I = 0 TO 9
  301. 2560       LOCATE I+I+6,1:CALL QPRINT (FLAG%,A$(I))
  302. 2570     NEXT I
  303. 2580  ' SCNO$= " SCREEN NUMBER "+RIGHT$("     "+STR$(ISCREEN) ,5)
  304. 2590  ' LOCATE 20,10:PRINT SCNO$
  305. 2600   NEXT ISCREEN
  306. 2610   TINDEX%=4:GOSUB 3000
  307. 2620 RETURN
  308. 2630 ' time CLS routine
  309. 2632    PRINT " READY TO DO BASIC  'CLS' 500 TIMES "
  310. 2634    INPUT " ENTER TO CONTINUE ";JUNK$
  311. 2640   NOSCREENS=200 * SECDIV#
  312. 2650   STARTTIME$=TIME$
  313. 2660   FOR ISCREEN = 1 TO NOSCREENS
  314. 2670     CLS
  315. 2680   NEXT ISCREEN
  316. 2690   TINDEX%=8:GOSUB 3000
  317. 2700 RETURN
  318. 2710 ' time xrep routine
  319. 2720   ATTRIBUTE% = NORMAL%
  320. 2730   BLANK$=" "
  321. 2732    PRINT " READY TO DO STAN'S CLREOS SUBROUTINE TO CLEAR THE SCREEN 500 TIMES "
  322. 2734    INPUT " ENTER TO CONTINUE ";JUNK$
  323. 2740   COUNT%=2000
  324. 2750   NOSCREENS=200  * SECDIV#
  325. 2760   STARTTIME$=TIME$
  326. 2770   FOR ISCREEN = 1 TO NOSCREENS
  327. 2780     LOCATE 1,1:CALL CLREOS(FLAG%)
  328. 2790   NEXT ISCREEN
  329. 2800   TINDEX%=9:GOSUB 3000
  330. 2810 RETURN
  331. 2820 INPUT  " ENTER TO STOP THE PROGRAM ";JUNK$
  332. 2830 END
  333. 2840 REM TIMING SUBROUTINE
  334. 2850 REM  inputs:  STARTTIME$
  335. 2860 REM        ENDTIME$
  336. 2870 REM  output:  DIFTIME#     time in seconds
  337. 2880 SHH#=VAL(LEFT$(STARTTIME$,2))
  338. 2890 EHH#=VAL(LEFT$(ENDTIME$,2))
  339. 2900 SSS#=VAL(RIGHT$(STARTTIME$,2))
  340. 2910 ESS#=VAL(RIGHT$(ENDTIME$,2))
  341. 2920 SMM#=VAL(MID$(STARTTIME$,4,2))
  342. 2930 EMM#=VAL(MID$(ENDTIME$,4,2))
  343. 2940 STIME#=SHH#*3600!+SMM#*60!+SSS#
  344. 2950 ETIME#=EHH#*3600!+EMM#*60!+ESS#
  345. 2960 DIFTIME#=ETIME#-STIME#
  346. 2970 IF DIFTIME# < 0! THEN DIFTIME#= DIFTIME# + 3600! * 24!
  347. 2980 RETURN
  348. 2990 REM
  349. 3000 REM  compute the end time for TINDEX%
  350. 3010    ENDTIME$ = TIME$
  351. 3020    GOSUB 2840
  352. 3060    T$(TINDEX%) = STR$( DIFTIME# / NOSCREENS )
  353. 3070    T$(TINDEX%) = LEFT$(T$(TINDEX%)+SPACE$(10),10)
  354. 3080 ' display the end time on the screen and on the TIMEPRIN.FIL
  355. 3090    LSET TT$=T$(TINDEX%)
  356. 3100    LSET AA$=A$(TINDEX%)
  357. 3102   LSET CHECKI$=RIGHT$(STR$(TINDEX%),1)
  358. 3104   IF I = 1 THEN LSET SS$=SPACE$(19)+CHR$(13)+CHR$(10)
  359. 3108   IF I > 1 THEN LSET SS$=S$+CHR$(13)+CHR$(10) ' carriage return, line feed
  360. 3110    PUT 1,TINDEX%
  361. 3120 GOSUB 2080
  362. 3130 RETURN
  363.